import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

img = cv.imread('../pic/butterfly.jpg')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

# 安装的版本太新，申请了算法专利保护，不能够使用
# 创建 SURF 对象。您可以在此处或稍后指定参数
surf = cv.xfeatures2d.SURF_create(400)

# 直接查找关键点和描述符
kp, des = surf.detectAndCompute(img, None)
# 图片中无法显示1199个关键点。我们将其减少到50左右以绘制在图像上
len(kp)

# 400.0
print(surf.getHessianThreshold())

surf.setHessianThreshold(50000)
# 再次计算关键点并检查其数量
kp, des = surf.detectAndCompute(img, None)
# 47
print(len(kp))

img2 = cv.drawKeypoints(img, kp, None, (255, 0, 0), 4)
# 可以看到 SURF 更像是一个斑点检测器。它检测蝴蝶翅膀上的白色斑点
plt.imshow(img2), plt.show()
